home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
001-025
/
disk_010
/
iff
/
gio.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
5KB
|
115 lines
#ifndef GIO_H
#define GIO_H
/*----------------------------------------------------------------------*
* GIO.H defs for Generic I/O Speed Up Package. 01/06/86
* See GIOCall.C for an example of usage.
* Read not speeded-up yet. Only one Write file buffered at a time.
* Note: The speed-up provided is ONLY significant for code such as IFF
* which does numerous small Writes and Seeks.
*----------------------------------------------------------------------*/
/* Use this file interface in place of ALL Open,Close,Read,Write,Seek DOS
* calls for an optional i/o speed-up via buffering. You must use ONLY
* these G routines for a file that is being buffered; e.g., call GClose
* to Close the file, etc.
* It is harmless though not necessary to use G routines for a file that
* is not being buffered; e.g., GClose and Close are equivalent in that
* case.
* This Version only buffers one file at a time, and only for writing.
* If you call GWriteDeclare for a second file before the first file
* is GClosed, the first file becomes unbuffered. This is harmless, no
* data is lost, the first file is simply no longer speeded-up.
*/
/* Before compiling any modules that make G calls, or compiling gio.c,
* you must set the GIO_ACTIVE flag below.
*
* To omit the speed-up code,
* #define GIO_ACTIVE 0
*
* To make the speed-up happen:
* 1. #define GIO_ACTIVE 1
* 2. link gio.o into your program
* 3. GWriteDeclare(file, buffer, size)
* after f
GOpening the file and before doing
* any writing.
* 4. ONLY use GRead, GWrite, GSeek, GClose -- do not use the DOS i/o
* routines directly.
*/
#define GIO_ACTIVE 1
#ifndef EXEC_TYPES_H
#include "exec/types.h"
#endif
#ifndef LIBRARIES_DOS_H
#include "libraries/dos.h"
#endif
#ifndef OFFSET_BEGINNING
#define OFFSET_BEGINNING OFFSET_BEGINING
#endif
#if GIO_ACTIVE
/* Present for completeness in the interface.
* "openmode" is either MODE_OLDFILE to read/write an existing file, or
* MODE_NEWFILE to write a new file.
* RETURNs a "file" pointer to a system-supplied structure that describes
* the open file. This pointer is passed in to the other routines below.*/
/* extern BPTR GOpen(char *, int openmode); */
/* NOTE: Flushes & Frees the write buffer.
* Returns -1 on error from Write.*/
/* extern int GClose(BPTR file); */
/* Read not speeded-up yet.
* GOpen the file, then do GReads to get successive chunks of data in
* the file. Assumes the system can handle any number of bytes in each
* call, regardless of any block-structure of the device being read from.
* When done, GClose to free any system resources associated with an
* open file.*/
/* extern int GRead(BPTR, BYTE *, int nBytes); */
/* Writes out any data in write buffer for file.
* NOTE WHEN have Seeked into middle of buffer:
* GWriteFlush causes current position to be the end of the data written.
* -1 on error from Write.*/
/* extern int GWriteFlush(BPTR file); */
/* Sets up variables to describe a write buffer for the file.*/
/* -1 on error from Write.*/
/* extern int GWriteDeclare(BPTR, BYTE *, LONG); */
/* ANY PROGRAM WHICH USES "GWrite" MUST USE "GSeek" rather than "Seek"
* TO SEEK ON A FILE BEING WRITTEN WITH "GWrite".
* "Write" with Generic speed-up.
* -1 on error from Write. else returns # bytes written to disk.
* Call GOpen, then do successive GWrites with GSeeks if required,
* then GClose when done. (IFF does require GSeek.)*/
/* extern int GWrite( BPTR, BYTE *, int nBytes); */
/* "Seek" with Generic speed-up, for a file being written with GWrite.*/
/* Returns what Seek returns, which appears to be the position BEFORE
* seeking, though the documentation says it returns the NEW position.*/
/* CURRENTLY RETURNS 0 WHEN SEEKING WITHIN THE BUFFER.*/
/* Eventually, will support two independent files, one being read, the
* other being written. Or could support even more. Designed so is safe
* to call even for files which aren't being buffered.*/
/* extern int GSeek(BPTR, BYTE *, int mode); */
#else /* not GIO_ACTIVE */
#define GOpen(filename, openmode) Open(filename, openmode)
#define GClose(file) Close(file)
#define GRead(file, buffer, nBytes) Read(file, buffer, nBytes)
#define GWriteFlush(file) (0)
#define GWriteDeclare(file, buffer, nBytes) (0)
#define GWrite(file, buffer, nBytes) Write(file, buffer, nBytes)
#define GSeek(file, position, mode) Seek(file, position, mode)
#endif GIO_ACTIVE
#endif